package com.master.bd.calculo_frete;

import java.sql.*;

import com.master.ed.*;
import com.master.root.*;
import com.master.util.*;
import com.master.util.bd.*;


public class Calcula_Frete_Aereo extends Calcula_Frete{


    public Calcula_Frete_Aereo(ExecutaSQL executasql) {
        super(executasql);
        // // ("Calcula_Frete_Standard 1");
    }


    public void calcula(Calcula_FreteED ed)
    throws Excecoes{


            Localiza_Tabela = new Localiza_Tabela(this.executasql);
            Tabela_FreteBean tabelaFreteED = new Tabela_FreteBean();

            ed.setLocalizado("N");
            ed.setDM_Tem_Cidade("S");
            ed.setDM_Tem_Peso("N");
            ed.setDM_Tem_Modal("N");
            ed.setDM_Tem_Validade("N");
            ed.setDM_Tem_Vigencia("N");
            ed.setDM_Tem_Empresa("N");
            ed.setDM_Tem_Regiao_Estado("N");
            ed.setDM_Tem_Estado("S");
            ed.setDM_Tem_Subregiao("S");
            ed.setDM_Tem_Regiao_Pais("N");
            ed.setDM_Tem_Pais("S");
            ed.setDM_Tabela_Reversa("N");
            ed.setDM_Tem_Tabela_Unidade("S");
            ed.setDM_Tem_Produto("S");

            ed.setDM_Percurso_Busca("Origem_Destino");


                // // ("Localiza_Tabela 1");

                tabelaFreteED = Localiza_Tabela.escolheTabela(ed);


                if ("S".equals(tabelaFreteED.getDM_Localizado())) {
                  // // ("achou tabela- oid >> " + tabelaFreteED.getOID());

                    this.calculaFretePeso(tabelaFreteED, ed);
                    this.calculaFreteValor(tabelaFreteED, ed);
                    this.calculaPedagio(tabelaFreteED, ed);
                    this.calculaColetaEntrega(tabelaFreteED, ed);

                    // // ("calculou tudo ");

                }
    }

    protected void calculaFretePeso( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            // // ("achou tabela- getNR_Peso >> " + ed.getNR_Peso_Tabela());

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            if (ed.getNR_Peso_Tabela() < 26){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Ate25() * ed.getNR_Peso_Tabela();
            }else if (ed.getNR_Peso_Tabela() < 51){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Ate50() * ed.getNR_Peso_Tabela();
            }else if (ed.getNR_Peso_Tabela() < 301){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Ate300() * ed.getNR_Peso_Tabela();
            }else if (ed.getNR_Peso_Tabela() < 501){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Ate500() * ed.getNR_Peso_Tabela();
            }else if (ed.getNR_Peso_Tabela() < 1001){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Ate1000() * ed.getNR_Peso_Tabela();
            }
            if (VL_Movimento_Frete == 0.0 || ed.getNR_Peso_Cubado() > 1000){
                VL_Movimento_Frete = (tabelaFreteED.getVL_C_Acima1000() * ed.getNR_Peso_Tabela());
            }
            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);

    }

    protected void calculaFreteValor(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------AD VALOREM--------------------------------------------------
            Tipo_Movimento = "AV";
            VL_Movimento_Frete = (ed.getVL_Nota_Fiscal() * tabelaFreteED.getPE_C_Ad_Valorem() / 100);


            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);

    }

    protected void calculaPedagio(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------PEDAGIO-----------------------------------------------------
        Tipo_Movimento = "PED";
        VL_Movimento_Frete = tabelaFreteED.getVL_C_Pedagio();

        if (ed.getNR_Peso_Tabela() >100 ) VL_Movimento_Frete=(ed.getNR_Peso_Tabela() / 100 * 0.96);


        //                double Peso_Pedagio=NR_Peso_Cubado_NF;
        //                while (Peso_Pedagio >100){
        //                    Peso_Pedagio=Peso_Pedagio-100;
        //                    VL_Movimento_Frete=VL_Movimento_Frete + 0.72;
        //                }

        if (VL_Movimento_Frete < 1.45) VL_Movimento_Frete = tabelaFreteED.getVL_C_Pedagio();
        ed.setCD_Tipo_Movimento(Tipo_Movimento);
        ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
        ed.setVL_Movimento(VL_Movimento_Frete);
        this.incluiMovimento(ed);

    }

    protected void calculaColetaEntrega(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{


      if (!"X".equals(ed.getDM_Tipo_Coleta()) && !"".equals(ed.getDM_Tipo_Coleta()))
      {
          // --------------------TX EXC COLETA--------------------------------------------------
          Tipo_Movimento = "TEC";
          if (ed.getNR_Peso_Tabela()>10) {
            VL_Movimento_Frete = tabelaFreteED.getVL_TX_Exc_Coleta() * (ed.getNR_Peso_Tabela()-10);
            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);

          }
          if ("U".equals(ed.getDM_Tipo_Coleta()))
          {
              // --------------------TX COLETA URG-------------------------------------------------
              Tipo_Movimento = "TCU";
              if (ed.getNR_Peso_Tabela() < 201){
                VL_Movimento_Frete = tabelaFreteED.getVL_TX_Col_Urg_200();
              }else if (ed.getNR_Peso_Tabela() < 1001){
                VL_Movimento_Frete = tabelaFreteED.getVL_TX_Col_Urg_1000() ;
              }
              if (VL_Movimento_Frete == 0.0 || ed.getNR_Peso_Tabela() > 1000){
                VL_Movimento_Frete = (tabelaFreteED.getVL_TX_Col_Urg_Ton());
              }
              ed.setCD_Tipo_Movimento(Tipo_Movimento);
              ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
              ed.setVL_Movimento(VL_Movimento_Frete);
              this.incluiMovimento(ed);
          }
          else {
              // --------------------TX COLETA------------------------------------------------------
              Tipo_Movimento = "TCN";
              VL_Movimento_Frete = tabelaFreteED.getVL_TX_Coleta();
              ed.setCD_Tipo_Movimento(Tipo_Movimento);
              ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
              ed.setVL_Movimento(VL_Movimento_Frete);
              this.incluiMovimento(ed);

          }
      }

      if (!"X".equals(ed.getDM_Tipo_Entrega()) && !"".equals(ed.getDM_Tipo_Entrega()))
      {
        // --------------------TX EXC ENTREGA-------------------------------------------------
        Tipo_Movimento = "TEE";
        if (ed.getNR_Peso_Tabela () > 10) {
          VL_Movimento_Frete = tabelaFreteED.getVL_TX_Exc_Entrega () *
              (ed.getNR_Peso_Tabela () - 10);
          ed.setCD_Tipo_Movimento(Tipo_Movimento);
          ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
          ed.setVL_Movimento(VL_Movimento_Frete);
          this.incluiMovimento(ed);

        }

        if ("U".equals (ed.getDM_Tipo_Entrega ())){
          // --------------------TX ENTREGA URG-------------------------------------------------
          Tipo_Movimento = "TEU";
          if (ed.getNR_Peso_Tabela () < 201) {
            VL_Movimento_Frete = tabelaFreteED.getVL_TX_Ent_Urg_200 ();
          }
          else if (ed.getNR_Peso_Tabela () < 1001) {
            VL_Movimento_Frete = tabelaFreteED.getVL_TX_Ent_Urg_1000 ();
          }
          if (VL_Movimento_Frete == 0.0 || ed.getNR_Peso_Tabela () > 1000) {
            VL_Movimento_Frete = (tabelaFreteED.getVL_TX_Ent_Urg_Ton ());
          }
          ed.setCD_Tipo_Movimento(Tipo_Movimento);
          ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
          ed.setVL_Movimento(VL_Movimento_Frete);
          this.incluiMovimento(ed);
        }
        else {
          // --------------------TX ENTREGA-----------------------------------------------------
          Tipo_Movimento = "TEN";
          VL_Movimento_Frete = tabelaFreteED.getVL_TX_Entrega ();
          ed.setCD_Tipo_Movimento(Tipo_Movimento);
          ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
          ed.setVL_Movimento(VL_Movimento_Frete);
          this.incluiMovimento(ed);
        }
      }
    }
}
